package com.djl.rabbitmq.three;

import com.djl.rabbitmq.utils.RabbitMqUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.MessageProperties;

import java.nio.charset.StandardCharsets;
import java.util.Scanner;

/**
 * @program: rabbitmq-hello
 * @description: 消息在手动应答时不丢失，放回队列重新消费
 * @author: Mr.dai
 * @create: 2021-09-10 14:15
 **/

public class Task2 {
//    队列名称
    private static final String task_queue_name="ack_queue";

    public static void main(String[] args) throws Exception {
        Channel channel = RabbitMqUtils.getChannel();
        //声明队列
        boolean durable=true;//需要让队列进行持久化
        //信道开启发布确认
        channel.confirmSelect();

        /**
         *         发送一个消息
         *         1.发送到哪个交换机
         *         2.路由的key值是哪个，本次是队列名称
         *         3.其他参数信息
         *         4.发送消息的消息体
         */
        channel.queueDeclare(task_queue_name,durable,false,false,null);
        Scanner scanner=new Scanner(System.in);
        while (scanner.hasNext()){
            String messge= scanner.next();
            //设置生产者发布消息未持久化消息，要求保存到磁盘上，入宫props不添加属性则保存在内存中

            channel.basicPublish("",task_queue_name, MessageProperties.PERSISTENT_TEXT_PLAIN,messge.getBytes(StandardCharsets.UTF_8));
            System.out.println("生产者发出消息："+messge);
        }

    }
}
